#4.数字分组求偶数和
#问题描述
#小M面对一组从 1 到 9 的数字，这些数字被分成多个小组，并从每个小组中选择一个数字组成一个新的数。目标是使得这个新数的各位数字之和为偶数。任务是计算出有多少种不同的分组和选择方法可以达到这一目标。
#
#numbers: 一个由多个整数字符串组成的列表，每个字符串可以视为一个数字组。小M需要从每个数字组中选择一个数字。
#例如对于[123, 456, 789]，14个符合条件的数为：147 149 158 167 169 248 257 259 268 347 349 358 367 369。
#
#测试样例
#样例1：
#
#输入：numbers = [123, 456, 789]
#输出：14
#
#样例2：
#
#输入：numbers = [123456789]
#输出：4
#
#样例3：
#
#输入：numbers = [14329, 7568]
#输出：10

def solution(numbers):
    # Please write your code here
    #第一位是偶数组合的数量，第二位是奇数组合的数量
    f=[1,0]
    for num in numbers:
        #第一位是偶数的个数，第二位是奇数的个数
        c=[0,0]
        for n in str(num):
            c[int(n)&1]+=1
        #偶数组合的数量就等于已有偶数组合的数量*c中偶数的个数 + 已有奇数组合的数量*c中奇数的个数  
        #奇数数组合的数量就等于已有偶数组合的数量*c中奇数的个数 + 已有奇数组合的数量*c中偶数的个数    
        f=[f[0]*c[0]+f[1]*c[1],f[1]*c[0]+f[0]*c[1]]   
    print('偶数组合：',f[0]) 
    print('奇数组合：',f[1]) 
    return f[0]

if __name__ == "__main__":
    #  You can add more test cases here
    print(solution([123, 456, 789]) == 14)
    print(solution([123456789]) == 4)
    print(solution([14329, 7568]) == 10)